package main

import "fmt"

//如果类名首字母大写，表示 其他包也能访问
type Hero struct {
	//如果说类的属性 首字母大写，表示该属性是对外访问的；反之只能类的内部访问
	Name  string
	Ad    int
	level int //私有
}

// func (this Hero) Show() {
// 	fmt.Println("Name = ", this.Name)
// 	fmt.Println("Ad = ", this.Ad)
// 	fmt.Println("Level = ", this.Level)
// }

// func (this Hero) GetName() string {
// 	return this.Name
// }

// func (this Hero) SetName(newName string) {
// 	//当前 this 是调用该方法对象的副本(拷贝)
// 	this.Name = newName
// }

func (this *Hero) Show() {
	fmt.Println("Name = ", this.Name)
	fmt.Println("Ad = ", this.Ad)
	fmt.Println("Level = ", this.level)
}

func (this *Hero) GetName() string {
	return this.Name
}

//对外公用 方法(看方法首字母)
func (this *Hero) SetName(newName string) {
	//当前 this 是调用该方法对象的地址
	this.Name = newName
}

func main() {

	hero := Hero{Name: "zhang3", Ad: 100, level: 1}

	hero.Show()

	hero.SetName("li4")
	hero.Show()
}
